package co.com.desarrollo.pedidos.dao.impl;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import co.com.desarrollo.pedidos.dao.ProductoDAO;
import co.com.desarrollo.pedidos.entities.Producto;

@Repository("productoDAO")
public class JpaProductoDAOImpl implements ProductoDAO {

	@PersistenceContext
	private EntityManager entityManager;
	
	@Transactional(readOnly = true)
	public List<Producto> findAll() {
		return entityManager.createQuery("from Producto",Producto.class).getResultList();
	}

	@Transactional(readOnly = true)
	public Producto findById(long productoId) {		
		return entityManager.find(Producto.class, productoId);
	}

	@Transactional
	public Producto store(Producto producto) {
		return entityManager.merge(producto);
	}

	@Transactional(readOnly = true)
	public Producto findByName(String nombre) {
		return entityManager.createQuery("from Producto p where p.nombre = '"+nombre+"'", Producto.class).getSingleResult();
	}

	@Transactional(readOnly = true)
	public List<Producto> findProductosActivos() {
		return entityManager.createQuery("from Producto p where p.activo = 1", Producto.class).getResultList();
	}

	@Transactional(readOnly = true)
	public List<Producto> findProductosActivosByTipoProducto(long tipoProductoId) {
		return entityManager.createQuery("from Producto p where p.activo = 1 and p.tipoProducto.idtipoProducto = "+tipoProductoId, Producto.class).getResultList();
	}

}
